; ************************************************** ; ; SISTEMA DI ROTAZIONE PER CARICA OROLOGI AUTOMATICI ; (GIRELL-ONE) ; ; DI MICHELE GUERRA ; ; WWW.TATTIK.ALTERVISTA.ORG ; ; REVISIONE FIRMWARE: 04/11/2008 ; REVISIONE HARDWARE: 31/10/2008 ; ; COPYRIGHT (c) 2008 ; ; ************************************************** ; ; SINTESI FUNZIONAMENTO: ; ; . ALL'ACCENSIONE MOTORE SPENTO, AUTOTEST LED E RELE' ; E GIRO DI PROVA DEL MOTORE NEI DUE SENSI ; . LAMPEGGIO VERDE RAPIDO X SELEZIONE MODO ; . PRIMA PRESSIONE > VERDE > MODO 1 CONTINUO = 30 MIN ON (X SENSO DI ROTAZIONE) + 23 ORE OFF ; . SECONDA PRESSIONE > GIALLO > MODO 2 CONTINUO = 30 MIN ON (SENSO ORARIO) + 23.30 ORE OFF ; . TERZA PRESSIONE > ROSSO > MODO 3 CONTINUO = 30 MIN ON (SENSO ANTIORARIO) + 23.30 ORE OFF ; . ALTRA PRESSIONE TORNA AL MODO 1 ; . 2 SECONDI SENZA PRESSIONE PARTE IL MODO IMPOSTATO ; . ACCENSIONE PERMANENTE DEL LED NEL COLORE SECONDO IL MODO IMPOSTATO ; . PRESSIONE DURANTE CICLO TORNA ALL'ATTESA PRESSIONE DEL MODO INIZIALE ; ; ************************************************** ; DIRETTIVE PER IL COMPILATORE PROCESSOR 12F629 RADIX DEC INCLUDE "P12F629.INC" __CONFIG 3F8CH ; DEFINIZIONE VARIABILI ORG 20H RIT RES 2 ; X ROUTINE RITARDO 260MSEC TEMP RES 1 ; VARIABILI TEMPORANEE MODO RES 1 ; MODO IMPOSTATO 1,2,3 FLAGP RES 1 ; FLAG (BIT 0) PRESSIONE PULSANTE DURANTE CICLO DI FUNZIONAMENTO CONTA RES 2 ; CONTATORE X RITARDO 30 MINUTI TONA RES 1 ; TEMPO ON1 DURANTE CICLO TEMPORIZZATO (30 MINUTI X UNITA') TONB RES 1 ; TEMPO ON2 DURANTE CICLO TEMPORIZZATO (30 MINUTI X UNITA') TOFF RES 1 ; TEMPO OFF DURANTE CICLO TEMPORIZZATO (30 MINUTI X UNITA') ; DEFINIZIONE COSTANTI ONMOD1 EQU 1 ; PERIODI DI 30 MINUTI DI ON/OFF DEI DIVERSI MODI DI FUNZIONAMENTO ONMOD2 EQU 1 ONMOD3 EQU 1 OFFMOD1 EQU 46 OFFMOD2 EQU 47 OFFMOD3 EQU 47 ; DEFINIZIONE PORTE DEL PIC #DEFINE FREE1 GPIO,0 ; PORTA NON UTILIZZATA #DEFINE ROSSO GPIO,1 ; LED ROSSO #DEFINE VERDE GPIO,2 ; LED VERDE #DEFINE PULSANTE GPIO,3 ; PULSANTE SELEZIONE MODO #DEFINE RELE GPIO,4 ; RELE' DIREZIONE #DEFINE MOTORE GPIO,5 ; ATTIVAZIONE MOTORE ; DEFINIZIONE VETTORI ORG 00H ; VETTORE RESET GOTO INIT ; INIZIALIZZAZIONE DOPO RESET INIT BCF STATUS,RP0 ; BANCO 00 CLRF GPIO ; RESET I/O MOVLW 00000111 ; TUTTI GLI I/O SONO DIGITALI MOVWF CMCON BSF STATUS,RP0 ; BANCO 01 CALL 3FFH ; LEGGE IL VALORE DI CALIBRAZIONE MOVWF OSCCAL ; E LO SCRIVE NEL REGISTRO MOVLW 00001000B ; SET PORTE IN/OUT : GP3=INPUT MOVWF TRISIO MOVLW 10000101B ; PULLUP OFF, PRESCALER A TMR0 1:64 MOVWF OPTION_REG MOVLW 00000000B ; NO INTERRUPT MOVWF INTCON BCF STATUS,RP0 ; BANCO 00 MOVLW 00110001B ; TMR1 ON + PRESCALER 1:8 MOVWF T1CON ; FREQUENZA TIMER1=1MHZ:8 ; = 1 OVERFLOW OGNI ~.524 SEC CLRF GPIO ; RESET I/O ; AUTOTEST BSF VERDE ; TEST LED CALL RIT1SEC BSF ROSSO CALL RIT1SEC BCF VERDE CALL RIT1SEC BCF ROSSO BSF RELE ; TEST RELE CALL RIT260 BCF RELE CALL RIT260 BSF RELE CALL RIT260 BCF RELE BSF MOTORE ; TEST MOTORE CALL RIT1SEC CALL RIT1SEC BCF MOTORE CALL RIT1SEC CALL RIT1SEC BSF RELE BSF MOTORE CALL RIT1SEC CALL RIT1SEC BCF MOTORE CALL RIT1SEC BCF RELE ; ATTESA IMPOSTAZIONE MODO FUNZIONAMENTO INIZIO CLRF GPIO MOVLW 1 ; MODO INIZIALE 1 MOVWF MODO CALL RIT260 IN2 CLRWDT BTFSS PULSANTE ; ATTENDE IL RILASCIO DEL PULSANTE GOTO IN2 IN3 BSF VERDE ; ATTESA PRIMA PRESSIONE CON LED IN LAMPEGGIO VERDE CALL RIT260 BCF VERDE CALL RIT260 BTFSC PULSANTE GOTO IN3 PRES1 CLRWDT BTFSS PULSANTE ; ATTENDE IL RILASCIO DEL PULSANTE GOTO PRES1 BCF ROSSO ; MODO 1 (VERDE) BSF VERDE MOVLW 1 MOVWF MODO MOVLW 8 ; ASPETTA 2 SECONDI PER PRESSIONE O AVVIO CICLO MOVWF TEMP REDO1 CALL RIT260 BTFSS PULSANTE GOTO PRES2 DECFSZ TEMP,1 GOTO REDO1 GOTO CICLO PRES2 CLRWDT BTFSS PULSANTE ; ATTENDE IL RILASCIO DEL PULSANTE GOTO PRES2 BSF ROSSO ; (VERDE)+ROSSO MODO 2 (GIALLO) MOVLW 2 MOVWF MODO MOVLW 8 ; ASPETTA 2 SECONDI PER PRESSIONE O AVVIO CICLO MOVWF TEMP REDO2 CALL RIT260 BTFSS PULSANTE GOTO PRES3 DECFSZ TEMP,1 GOTO REDO2 GOTO CICLO PRES3 CLRWDT BTFSS PULSANTE ; ATTENDE IL RILASCIO DEL PULSANTE GOTO PRES3 BCF VERDE ; ROSSO MODO 3 MOVLW 3 MOVWF MODO MOVLW 8 ; ASPETTA 2 SECONDI PER PRESSIONE O AVVIO CICLO MOVWF TEMP REDO3 CALL RIT260 BTFSS PULSANTE GOTO PRES1 DECFSZ TEMP,1 GOTO REDO3 GOTO CICLO ; CICLO TEMPORIZZATO DI FUNZIONAMENTO ; (PRESSIONE PULSANTE DURANTE IL CICLO RITORNA ALLA SELEZIONE DEL MODO) CICLO CLRWDT CLRF GPIO MOVLW 1 ; MODO = 1 SUBWF MODO,W BTFSC STATUS,Z GOTO MODO1 MOVLW 2 ; MODO = 2 SUBWF MODO,W BTFSC STATUS,Z GOTO MODO2 MODO3 BSF ROSSO ; MODO = 3 MOVLW ONMOD1 MOVWF TONA CLRF TONB MOVLW OFFMOD1 MOVWF TOFF GOTO TEMPOA MODO2 BSF ROSSO BSF VERDE MOVLW ONMOD2 MOVWF TONB CLRF TONA MOVLW OFFMOD2 MOVWF TOFF GOTO TEMPOA MODO1 BSF VERDE MOVLW ONMOD1 MOVWF TONA MOVWF TONB MOVLW OFFMOD1 MOVWF TOFF TEMPOA MOVF TONA,W BTFSC STATUS,Z ; SE TONA=0 SALTA ALLA PARTE B GOTO PTEMPOB BSF MOTORE ; ACCENDE IL MOTORE CALL RIT30M BTFSC FLAGP,0 GOTO INIZIO ; SE PULSANTE PREMUTO DURANTE CICLO 30M DECFSZ TONA,1 GOTO TEMPOA PTEMPOB BCF MOTORE ; CAMBIO DIREZIONE "SOFT" CALL RIT1SEC CALL RIT1SEC BSF RELE CALL RIT1SEC BSF MOTORE TEMPOB MOVF TONB,W BTFSC STATUS,Z ; SE TONB=0 SALTA ALLA PAUSA GOTO PPAUSA CALL RIT30M BTFSC FLAGP,0 GOTO INIZIO ; SE PULSANTE PREMUTO DURANTE CICLO 30M DECFSZ TONB,1 GOTO TEMPOB PPAUSA BCF MOTORE ; SPEGNE IL MOTORE BCF RELE ; SPEGNE IL RELE' PAUSA CALL RIT30M BTFSC FLAGP,0 GOTO INIZIO ; SE PULSANTE PREMUTO DURANTE CICLO 30M DECFSZ TOFF,1 GOTO PAUSA GOTO CICLO ; *************************************************************** ; SUBROUTINE ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ; ROUTINE PAUSA ~262915USEC = ~.263 SEC RIT260 CLRF RIT CLRF RIT+1 LOOP_RIT CLRWDT DECFSZ RIT,1 GOTO LOOP_RIT DECFSZ RIT+1,1 GOTO LOOP_RIT RETURN ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ; RITARDO CIRCA 1 SECONDO RIT1SEC CALL RIT260 CALL RIT260 CALL RIT260 CALL RIT260 RETURN ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ; RITARDO 30 MINUTI CON FLAG DI PRESSIONE PULSANTE RIT30M CLRF FLAGP MOVLW 10 MOVWF CONTA+1 RELOAD MOVLW 171 ; 30*60 SECONDI = 4*0.263 SEC * 171 * 10 = 1799 SEC MOVWF CONTA REDO30 CALL RIT260 ; 1 SECONDO IN TOTALE BTFSS PULSANTE ; + CONTROLLO PRESSIONE PULSANTE GOTO PREMUTO CALL RIT260 BTFSS PULSANTE GOTO PREMUTO CALL RIT260 BTFSS PULSANTE GOTO PREMUTO CALL RIT260 BTFSS PULSANTE GOTO PREMUTO DECFSZ CONTA,1 ; (X171) GOTO REDO30 DECFSZ CONTA+1,1 ; (X10) GOTO RELOAD RETURN PREMUTO BSF FLAGP,0 ; FLAG PULSANTE PREMUTO RETURN ; FINE PROGRAMMA END